package br.com.qualityempresa.seguranca


/**
 * Classe respos�vel em controlar o acesso na aplica��o.
 * @author Manu
 * @version 1.0
 */
class AutorizacaoUtils {

	/**
	 * @param regraAcessoList lista de regras de acesso
	 * @param controle informa o nome da Controller
	 * @param acao informa o nome da Action
	 * @return	TRUE caso na lista de regras possui permiss�o para acessar a controller->action <br/>
	 * 			FALSE caso na lista de regras N�O possui permiss�o para acessar a controller->action
	 */
	public boolean verificarPermissao(Set regraAcessoList, String controle, String acao) {
		def resultado = false
		for (RegraAcesso regraAcesso : regraAcessoList) {
			if (!regraAcesso.permitir) {
				if (regraAcesso.isExpressaoCoincide(controle, acao)) {
					return false
				}
			} else {
				if (regraAcesso.isExpressaoCoincide(controle, acao)) {
					return true
				}
			}
		}
		return resultado
	}


	/**
	 * @param controle informa o nome da Controller  
	 * @param acao informa o nome da Action
	 * @return	TRUE caso o usuario autenticado na sess�o possua permiss�o para acessar a controller->action <br/>
	 * 			FALSE caso o usuario autenticado na sess�o N�O possua permiss�o para acessar a controller->action
	 */
	public boolean verificarPermissao(String controle, String acao) {
		def AutenticacaoUtils autenticacaoUtils = new AutenticacaoUtils()
		def AutorizacaoUtils autorizacaoUtils = new AutorizacaoUtils()

		def Perfil perfil = autenticacaoUtils.getPerfilUsuarioSistema()
		def regrasAcessoList = perfil?.regrasAcesso?.findAll()
		return regrasAcessoList && autorizacaoUtils.verificarPermissao(regrasAcessoList, controle, acao)
	}
}
